Convolutional Neural Networks (CNN) ইমেজ ক্লাসিফিকেশন এর জন্য অন্যতম জনপ্রিয় এবং শক্তিশালী ডিপ লার্নিং মডেল। এটি ইমেজের প্যাটার্ন এবং বৈশিষ্ট্য শনাক্ত করতে অত্যন্ত দক্ষ। এখানে CNN মডেল তৈরি করার প্রক্রিয়া সম্পর্কে বিস্তারিত ব্যাখ্যা করা হয়েছে, যেখানে CNTK ব্যবহার করা হবে।
CNN মডেল তৈরি করার পদক্ষেপ
১. ইনপুট ডেটা প্রস্তুতি
- ইমেজ ক্লাসিফিকেশনের জন্য প্রথমেই প্রয়োজন হবে একটি ইমেজ ডেটাসেট। সাধারণত ImageNet, CIFAR-10, MNIST এর মতো ডেটাসেট ব্যবহার করা হয়।
২. CNN মডেল তৈরি করা
CNN মডেল তৈরি করার জন্য আপনাকে কয়েকটি লেয়ার (কনভোলিউশনাল লেয়ার, পুলিং লেয়ার, ফুলি কানেক্টেড লেয়ার) এবং একটি সফটম্যাক্স লেয়ার তৈরি করতে হবে।
CNN মডেল তৈরি করতে CNTK ব্যবহার করে কোড উদাহরণ
import cntk as C
from cntk import input_variable, convolution2d, pooling, dense, dropout, cross_entropy_with_softmax, classification_error
from cntk.initializer import glorot_uniform
# ইনপুট ভেরিয়েবল (ইমেজের আকার 224x224x3)
input_shape = (224, 224, 3) # 224x224 RGB ইমেজ
input_var = input_variable(input_shape)
# কনভোলিউশনাল লেয়ার (Conv1)
conv1 = convolution2d(32, (3, 3), pad=True, name='Conv1')(input_var)
conv1_relu = C.ops.relu(conv1)
# পুলিং লেয়ার (Max Pooling)
pool1 = pooling(conv1_relu, (2, 2), strides=(2, 2), name='Pool1')
# কনভোলিউশনাল লেয়ার (Conv2)
conv2 = convolution2d(64, (3, 3), pad=True, name='Conv2')(pool1)
conv2_relu = C.ops.relu(conv2)
# পুলিং লেয়ার (Max Pooling)
pool2 = pooling(conv2_relu, (2, 2), strides=(2, 2), name='Pool2')
# কনভোলিউশনাল লেয়ার (Conv3)
conv3 = convolution2d(128, (3, 3), pad=True, name='Conv3')(pool2)
conv3_relu = C.ops.relu(conv3)
# পুলিং লেয়ার (Max Pooling)
pool3 = pooling(conv3_relu, (2, 2), strides=(2, 2), name='Pool3')
# ফ্ল্যাটেনিং লেয়ার
flattened = C.ops.reshape(pool3, (-1,))
# ফুলি কানেক্টেড লেয়ার
fc1 = dense(256, activation=C.ops.relu, init=glorot_uniform(), name='FC1')(flattened)
dropout1 = dropout(fc1, 0.5)
# আউটপুট লেয়ার (Softmax)
output = dense(10, activation=None, init=glorot_uniform(), name='Output')(dropout1) # 10 শ্রেণী
# লস ফাংশন
label_var = input_variable(10) # 10 শ্রেণী
loss = cross_entropy_with_softmax(output, label_var)
# অটোগ্রেডিয়েন্ট বেসড অপটিমাইজেশন
learner = C.adam(output.parameters, lr=0.001)
trainer = C.Trainer(output, (loss, classification_error(output, label_var)), learner)
# মডেল ট্রেনিং
def train_model(train_data, num_epochs=10):
for epoch in range(num_epochs):
for minibatch in train_data:
features, labels = minibatch
trainer.train_minibatch({input_var: features, label_var: labels})
train_model(train_data)
কোডের ব্যাখ্যা:
- ইনপুট ভেরিয়েবল:
input_var = input_variable(input_shape)এখানে ইনপুট ডেটা 224x224 আকারের ইমেজ হিসেবে ধারণ করা হচ্ছে।
- কনভোলিউশনাল লেয়ার (Conv1, Conv2, Conv3):
- কনভোলিউশনাল লেয়ারগুলি ইমেজের বিভিন্ন ফিচার যেমন প্যাটার্ন এবং এজ শনাক্ত করে।
convolution2dফাংশনটি 2D কনভোলিউশন তৈরি করে। - কনভোলিউশনাল লেয়ার গুলোর পরে ReLU (Rectified Linear Unit) অ্যাকটিভেশন ফাংশন ব্যবহার করা হয়েছে, যা নেগেটিভ ভ্যালু গুলি মুছে দেয় এবং পজিটিভ ভ্যালু গুলিকে রেখে দেয়।
- কনভোলিউশনাল লেয়ারগুলি ইমেজের বিভিন্ন ফিচার যেমন প্যাটার্ন এবং এজ শনাক্ত করে।
- পুলিং লেয়ার (Pooling):
- Max Pooling লেয়ারগুলি, কনভোলিউশনাল লেয়ার দ্বারা উৎপন্ন ডেটার মাত্রা কমিয়ে, প্রধান ফিচারগুলি রেখে দেয়।
- ফুলি কানেক্টেড লেয়ার (Fully Connected Layer):
dense(256)ফাংশনটি 256 ইউনিটের একটি ফুলি কানেক্টেড লেয়ার তৈরি করে। এখানে ReLU অ্যাকটিভেশন ফাংশন ব্যবহৃত হয়েছে।- পরে Dropout ব্যবহার করা হয়েছে, যা ট্রেনিংয়ের সময় র্যান্ডম ইউনিট নিষ্ক্রিয় করে মডেলকে সাধারণীকরণ করতে সাহায্য করে।
- আউটপুট লেয়ার (Softmax):
- আউটপুট লেয়ারে softmax অ্যাকটিভেশন ফাংশন ব্যবহার করা হয় যা মাল্টি-ক্লাস শ্রেণীভিত্তিক সম্ভাব্যতা দেয়।
- লস ফাংশন এবং অপটিমাইজেশন:
- Cross-Entropy Loss ব্যবহার করা হয়েছে, যা শ্রেণীভিত্তিক আউটপুট এবং আসল লেবেলগুলির মধ্যে তফাত মাপবে।
- Adam Optimizer ব্যবহার করা হয়েছে, যা একটি জনপ্রিয় অপটিমাইজার এবং স্টকাস্টিক গ্রেডিয়েন্ট ডিসেন্ট (SGD)-এর একটি উন্নত সংস্করণ।
- মডেল ট্রেনিং:
trainer.train_minibatch()ফাংশনটি মিনিব্যাচগুলির মাধ্যমে মডেল প্রশিক্ষণ করে।
মডেল ট্রেনিং ও পরীক্ষণ
ইমেজ ডেটাসেট লোড করা
- মডেল ট্রেনিংয়ের জন্য সাধারণত CIFAR-10, MNIST, বা ImageNet ডেটাসেট ব্যবহার করা হয়।
- ডেটা লোড করার জন্য CNTK এর MinibatchSource এবং ImageDeserializer ব্যবহার করা যেতে পারে।
মডেল মূল্যায়ন (Evaluation)
- মডেল ট্রেনিংয়ের পর, accuracy এবং loss পরিমাপ করার জন্য classification_error এবং cross_entropy_with_softmax ফাংশনগুলি ব্যবহার করা হয়।
# Testing
test_data = MinibatchSource(test_data_stream)
test_minibatch = test_data.next_minibatch(1)
trainer.test_minibatch(test_minibatch)
সারাংশ
- CNN মডেল ইমেজ ক্লাসিফিকেশন এর জন্য অত্যন্ত কার্যকরী এবং CNTK এর মাধ্যমে আপনি সহজেই কনভোলিউশনাল নিউরাল নেটওয়ার্ক তৈরি করতে পারেন।
- এটি ইনপুট ডেটার বিভিন্ন বৈশিষ্ট্য যেমন প্যাটার্ন, এজ এবং সীমানা শিখে, ক্লাসিফিকেশন জন্য কার্যকরী ফলাফল প্রদান করে।
- CNTK এর GPU সমর্থন ডিপ লার্নিং মডেল ট্রেনিংয়ের গতি বাড়িয়ে দেয়।
Content added By
Read more